/**
* @file        SignalDeliverChainBuilder
* @brief       
* @version     1.0.0
* @author      Changlin.Jing 
* @date        2023/2/16 14:22
* @copyright   Copyright  2022 Langge Software Co., Ltd. All rights reserved.
*/
#ifndef LANGGEBASE_LOCSIGNALDELIVERCHAINBUILDER_HPP
#define LANGGEBASE_LOCSIGNALDELIVERCHAINBUILDER_HPP
#include "ut_symbols.h"
#include "loc_types.h"
#include "ILocSignalDeliver.hpp"
#include <list>
BEGIN_SPACE_LANGE_VDR
class LocSignalDeliverChainBuilder {
public:
    LocSignalDeliverChainBuilder() = default;
    std::shared_ptr<ILocSignalDeliver> createLocSignalDeliverChain(const WorkState &workState);
    virtual ~LocSignalDeliverChainBuilder()= default;
protected:
    virtual void makeDeliverIdList() = 0;
    std::list<vdr::LocSignalDeliverId> mDeliverIdList;
};

class RealTimeLocSignalDeliverChainBuilder:public LocSignalDeliverChainBuilder{
public:
    RealTimeLocSignalDeliverChainBuilder();

    ~RealTimeLocSignalDeliverChainBuilder() override;

    void makeDeliverIdList() override;
};

class PlaybackLocSignalDeliverChainBuilder:public LocSignalDeliverChainBuilder{
public:
    PlaybackLocSignalDeliverChainBuilder();

    ~PlaybackLocSignalDeliverChainBuilder() override;

    void makeDeliverIdList() override;
};

class LocSignalDeliverChainBuilderFactory{
public:
    static std::unique_ptr<LocSignalDeliverChainBuilder> createDeliverChainBuilder(const WorkState& workState);
};


END_SPACE_LANGE_VDR

#endif //LANGGEBASE_LOCSIGNALDELIVERCHAINBUILDER_HPP
